package com.copm.ifm.message.entity;

import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Positive;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 调用模板发送信息实体接收数据
 *
 * @author tp
 */
@Data
public class SendTemplateDto<T> implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 消息模板id
     */
    @Positive(message = "无效的模板id")
    private Long templateId;
    /**
     * 发送时间 当模板的策略为定时发送时，调用方需要传
     */
    private String sendTime;
    /**
     * 发送内容，如果模板中定义的内容包含内可变参数则需要传如入字段，json格式的string类型。
     * 模板内容如:你好${user},欢迎来到${address},
     * 应该传入{user:xxx,address:xxx},
     * <p>
     * 若模板中定义的内容不包含可变参数则不需要传入
     * 模板内容如：你有一条新的信息请注意查收！
     * 无需传此参数
     */

    private String content = "";
    /**
     * 消息接收人不传则使用模板中定义的接收人，若定义模板时没有指定接收人则返回无效的消息接收人
     * 消息接收人类型和模板创建时指定的接收用户类型强一致性。即若：创建模板时选定的用户类型为0（用户类型）这个传进来的值统一以明确的用户去发送
     * <p>
     * 。sendType为1时必传，若sendType为1时，此参数必须为明确的接收人信息。
     * sendType为0时，可以指定需要传递的接收人<StaffReceive>。
     */
    private List<T> receiveUser;

    private List<Integer> systemUser;


    /**
     * app推送时带上业务需要的自定义字段,String类型json格式
     */
    private Map<String, String> extras;

    /**
     * 发送类型，0、1,默认为0,
     * 0：消息接收人统一使用主数据id进行传递 T的值为Integer,
     * 1：消息接收人使用明确的接收信息进行传递T的值为String如，具体的手机号、具体的app用户标识
     */
    @Max(value = 1, message = "自定义接收人，需要前端填写基本的接收人信息")
    @Min(value = 0, message = "接收人是系统选定的人员id")
    private int sendType;

}
